﻿namespace Mohe.Scada.Util.Helper
{
    public static class ArrayHelper
    {
        public static List<int> GenerateSequence(this string input)
        {
            List<int> sequence = new List<int>();

            // 检查输入格式是否正确
            if (string.IsNullOrEmpty(input) || !input.Contains("-"))
            {
                throw new ArgumentException("输入格式不正确，应为'起始数字-结束数字'格式");
            }

            // 分割字符串获取起始和结束数字
            string[] parts = input.Split('-');
            if (parts.Length != 2)
            {
                throw new ArgumentException("输入格式不正确，应为'起始数字-结束数字'格式");
            }

            // 尝试将字符串转换为整数
            if (int.TryParse(parts[0], out int start) && int.TryParse(parts[1], out int end))
            {
                // 确保起始数字小于等于结束数字
                if (start > end)
                {
                    int temp = start;
                    start = end;
                    end = temp;
                }

                // 生成数字序列
                for (int i = start; i <= end; i++)
                {
                    sequence.Add(i);
                }
            }
            else
            {
                throw new ArgumentException("输入包含非数字字符");
            }

            return sequence;
        }

        public static byte[] GetByteArrayFromBoolArray(this bool[] value)
        {
            int byteLength = value.Length % 8 == 0 ? value.Length / 8 : value.Length / 8 + 1;
            byte[] result = new byte[byteLength];
            for (int i = 0; i < byteLength; i++)
            {
                int total = value.Length < 8 * (i + 1) ? value.Length - 8 * i : 8;
                for (int j = 0; j < total; j++)
                {
                    result[i] = SetBitValue(result[i], j, value[8 * i + j]);
                }
            }
            return result;
        }

        public static byte SetBitValue(byte src, int bit, bool value)
        {
            return value ? (byte)(src | (byte)Math.Pow(2, bit)) : (byte)(src & ~(byte)Math.Pow(2, bit));
        }
    }
}
